﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using CRC.GestionSalones.Dominio.Clases;
using CRC.Incidencias.Dominio.Clases;

namespace CRC.Incidencias.Dominio.Controladores
{
    class ControladorInformarIncidencia
    {
        private static String strQryQuienAtiendeIncidencia = "select as.Id, as.Descripcion from AsignacionIncidencia as order by as.Descripcion";

        public IList<Object[]> ListaQuienSoluciona()
        {
            ISession session = null;
            ITransaction tx = null;
            IList<Object[]> quienAtiendeIncidencias;

            try
            {
                session = CRC.NHibernate.NHibernateHelper.GetCurrentSession();
                quienAtiendeIncidencias = session.CreateQuery(strQryQuienAtiendeIncidencia).List<Object[]>();
                return quienAtiendeIncidencias;

            }
            catch (HibernateException he)
            {
                if (tx != null)
                {
                    tx.Rollback();
                    session.Close();
                }
                throw he;
            }
        }

        public void NuevaIncidencia(
            int pIntIncidentado,
            String pStrConcepto,
            int pLoSoluciona,
            DateTime pFechaLimite,
            String pStrObservaciones
        )
        {
            ISession session = null;
            ITransaction tx = null;
            Incidencia nuevaIncidencia = null;

            try
            {
                session = CRC.NHibernate.NHibernateHelper.GetCurrentSession();
                tx = session.BeginTransaction();

                Salon incidentado = (Salon)session.Get(typeof(Salon), pIntIncidentado);
                Concepto conc = (Concepto)session.Get(typeof(Concepto), pStrConcepto);
                AsignacionIncidencia laAtiende = (AsignacionIncidencia)session.Get(typeof(AsignacionIncidencia), pLoSoluciona);
                nuevaIncidencia = new Incidencia(incidentado, conc, laAtiende, pFechaLimite, pStrObservaciones);

                session.Save(nuevaIncidencia);
                tx.Commit();

            }
            catch (HibernateException he)
            {
                if (tx != null)
                {
                    tx.Rollback();
                    session.Close();
                }
                throw he;
            }
        }
    }
}
